package com.big.common.saToken.util;

import cn.dev33.satoken.stp.StpUtil;
import com.big.common.saToken.domain.dto.LoginDTO;

/**
 * Sa-Token 用户工具类
 * 提供获取当前登录用户信息的便捷方法
 *
 * @author 山归岿
 * @create 2025-06-22-15:36
 */
public class CurrentUserUtil {

    /**
     * 获取当前登录用户ID
     *
     * @return 用户ID
     */
    public static String getCurrentUserId() {
        return StpUtil.getLoginIdAsString();
    }

    /**
     * 获取当前登录用户名
     *
     * @return 用户名
     */
    public static String getCurrentUsername() {
        LoginDTO currentUser = getCurrentUser();
        return currentUser != null ? currentUser.getUsername() : null;
    }

    /**
     * 获取当前登录用户完整信息
     *
     * @return 用户信息DTO
     */
    public static LoginDTO getCurrentUser() {
        if (!StpUtil.isLogin()) {
            return null;
        }
        return (LoginDTO) StpUtil.getSession().get("userInfo");
    }

    /**
     * 设置当前用户信息到Session中
     *
     * @param userInfo 用户信息
     */
    public static void setCurrentUser(LoginDTO userInfo) {
        StpUtil.getSession().set("userInfo", userInfo);
    }

    /**
     * 获取当前用户昵称
     *
     * @return 昵称
     */
    public static String getCurrentNickname() {
        LoginDTO currentUser = getCurrentUser();
        return currentUser != null ? currentUser.getNickname() : null;
    }

    /**
     * 获取当前用户角色ID
     *
     * @return 角色ID
     */
    public static Long getCurrentRoleId() {
        LoginDTO currentUser = getCurrentUser();
        return currentUser != null ? currentUser.getRoleId() : null;
    }

    /**
     * 获取当前用户角色名称
     *
     * @return 角色名称
     */
    public static String getCurrentRoleName() {
        LoginDTO currentUser = getCurrentUser();
        return currentUser != null ? currentUser.getRoleName() : null;
    }

    /**
     * 获取当前用户部门ID
     *
     * @return 部门ID
     */
    public static Long getCurrentDeptId() {
        LoginDTO currentUser = getCurrentUser();
        return currentUser != null ? currentUser.getDeptId() : null;
    }

    /**
     * 获取当前用户部门名称
     *
     * @return 部门名称
     */
    public static String getCurrentDeptName() {
        LoginDTO currentUser = getCurrentUser();
        return currentUser != null ? currentUser.getDeptName() : null;
    }

    /**
     * 判断当前用户是否为指定角色
     *
     * @param roleName 角色名称
     * @return 是否为指定角色
     */
    public static boolean hasRole(String roleName) {
        String currentRoleName = getCurrentRoleName();
        return currentRoleName != null && currentRoleName.equals(roleName);
    }

    /**
     * 判断当前用户是否为管理员
     *
     * @return 是否为管理员
     */
    public static boolean isAdmin() {
        return hasRole("admin") || hasRole("管理员");
    }

    /**
     * 清除当前用户Session信息
     */
    public static void clearCurrentUser() {
        if (StpUtil.isLogin()) {
            StpUtil.getSession().delete("userInfo");
        }
    }

    /**
     * 获取当前用户头像
     *
     * @return 头像URL
     */
    public static String getCurrentAvatar() {
        LoginDTO currentUser = getCurrentUser();
        return currentUser != null ? currentUser.getAvatar() : null;
    }

}
